package com.softer.chengxin.sysrole.dao;

import com.softer.chengxin.common.domin.Page;
import com.softer.chengxin.common.domin.RoleModules;
import com.softer.chengxin.person.dao.provider.PersonDaoProvider;
import com.softer.chengxin.sysrole.dao.provider.SysRoleDaoProvider;
import com.softer.chengxin.sysrole.entity.*;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author zcz
 * @date 2018/12/20
 */
@Mapper
@Repository
public interface SysRoleDao {
    /**
     * 查询资源树
     * @param id
     * @return
     */
    @Select("SELECT id,module_name AS label,structure AS structure FROM `module` WHERE parent_id=#{id}")
    List<ModuleStreet> getModuleStreet(Integer id);
    /**
     * 根据角色id查询角色资源信息
     * @param roleId 角色id
     * @return 资源
     */
    @Select("SELECT mo_dules AS modules,`roles_name`  AS roleName,id FROM roules  WHERE `id` = #{roleId}")
    Role getModuleByRoleId(String roleId);
    /**
     * 加载角色列表
     * @param page      页面信息
     * @param loginName 登陆名
     * @return 角色列表
     */
    @SelectProvider(type = SysRoleDaoProvider.class, method = "getList")
    List<Role> getList(@Param("page") Page page, @Param("loginName") String loginName);
    /**
     * 查询角色count
     * @param loginName 登陆名
     * @return 角色列表
     */
    @Select("SELECT count(id) FROM roules WHERE adder=#{loginName} and role_type = '0'")
    int getCount(String loginName);
    /**
     * 查看dicCode是否已经存在（roules中dic_code唯一）
     * @param dicCode
     * @return count
     */
    @Select("SELECT COUNT(id) FROM roules WHERE dic_code = #{dicCode}")
    int getCountByDicCode(String dicCode);
    /**
     * 新增角色
     * @param role 角色信息
     * @return 处理结果
     */
    @Insert("INSERT INTO roules(dic_code,mo_dules,ADDTIME,adder,role_type,roles_name) VALUES(#{role.dicCode},#{role.modules},now(),#{role.adder},#{role.roleType},#{role.roleName})")
    int addRole(@Param("role") Role role);

    /**
     * 根据dicCode查询字典表字段名
     * @param dicCode
     * @return
     */
    @Select("SELECT name FROM dic_info WHERE code = #{dicCode}")
    String getDicNameByDicCode(String dicCode);
    /**
     * 编辑角色
     * @param role 角色信息
     * @return 处理结果
     */
    @UpdateProvider(type = SysRoleDaoProvider.class, method = "update")
    int update(Role role);

    /**
     * 删除角色
     * @param id 角色ID
     * @return 处理结果
     */
    @Delete("DELETE FROM roules WHERE id = #{id}")
    int delete(@Param("id") Integer id);
    /**
     * 用户分配角色时查看角色列表
     * @return 角色列表
     */
    @Select("SELECT id ,roles_name AS roleName,adder,ADDTIME AS addTime FROM roules WHERE role_type = '0'")
    List<Role> getUserRoleList();
    /**
     * 查看roleId是否已经被用户绑定过
     * @param roleId
     * @return count
     */
    @Select("SELECT COUNT(id) FROM manager_user WHERE role_id = #{roleId}")
    int getUserCountByroleId(int roleId);
    /**
     * 查询字典表角色字段，用来填充角色新增下拉框
     * @return 角色列表
     */
    @Select("SELECT name AS roleName,code AS dicCode FROM dic_info WHERE TYPE = '6'")
    List<Role> getDicInfoRoleList();
}
